﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Web.Models;

namespace Web.Repositories
{
    public class ReservaRepository
    {
        protected HoteluchoContext Db { get; set; }

        public ReservaRepository()
        {
            Db = HoteluchoContext.Instance;
        }

        public void AltaReserva(Reserva nuevaReserva)
        {
            Db.Reservas.Add(nuevaReserva);
            Db.SaveChanges();
            nuevaReserva.GenerarCodigoReserva();
            Db.SaveChanges();
            //nuevaReserva.EnviarConfirmacion();
        }

        public void BajaReserva(Reserva remover)
        {
            Db.Reservas.Remove(remover);
            Db.SaveChanges();
        }

        public Reserva GetReserva(int idReserva)
        {
            return Db.Reservas.Find(idReserva);
        }

        public List<Reserva> GetReservasEnRango(DateTime fechaIn, DateTime fechaOut)
        {
            var reservasEnRango = Db.Reservas.Where(x => (x.FechaEgreso >= fechaIn && x.FechaIngreso <= fechaOut)).ToList();
            return reservasEnRango;
        }

        internal dynamic GetReservaPorAnoMes(int ano, int mes)
        {
            var retVal = Db.Reservas.Where(x => (x.FechaEgreso.Year == ano) && (x.FechaEgreso.Month == mes)).ToList();
            return retVal;
        }

        internal dynamic GetAll()
        {
            return Db.Reservas.ToList();
        }

        internal dynamic getReservasPorFecha(DateTime fecha)
        {
            return Db.Reservas.Where(x => x.FechaIngreso == fecha).ToList();
        }

        internal Reserva GetReserva(string codigoReserva)
        {
            if (codigoReserva != string.Empty)
            {
                return Db.Reservas.FirstOrDefault(x => x.CodigoReserva == codigoReserva);
            }
            return null;
        }

        internal void Save()
        {
            Db.SaveChanges();
        }

        internal void EliminarReserva(Reserva reserva)
        {
            Db.Reservas.Remove(reserva);
            Db.SaveChanges();
        }
    }
}